package model;

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JOptionPane;


public class ConcreteImage extends Image {
	final static int MASQUE_COMPARAISON = 0xFF;
	private String codeMagique = null; 
	private String commentaires = null;
	private int hauteur = 0;
	private int largeur = 0;
	private int vMax = 0;
	private int[] data = null;
	BufferedImage img = null;

	@SuppressWarnings("resource")
	public ConcreteImage(File file) {
		// TODO Auto-generated constructor stub
		try {
			BufferedReader in = new BufferedReader(new FileReader(file));
			codeMagique = in.readLine();
			commentaires = in.readLine();
			//System.out.println(codeMagique+commentaires);
			String hautLarge = in.readLine();
			String hautLargeSplit[] = hautLarge.split(" ");
			hauteur = Integer.parseInt(hautLargeSplit[0]);
			largeur = Integer.parseInt(hautLargeSplit[1]);
			vMax = Integer.parseInt(in.readLine());
			data = new int[3];
			String dataStr = "";
			String strLine = ""; 
			while ((strLine = in.readLine()) != null)   
			{
				dataStr=dataStr+strLine;
			}
			in.close();
			String[] dataStrA = dataStr.split(" ");
			int elements = 0;
			img = new BufferedImage(hauteur, largeur, BufferedImage.TYPE_INT_RGB);
			for (int i=0;i<hauteur;i++)
			{
				for (int j=0;j<largeur;j++)
				{
					data[0] = Integer.parseInt(dataStrA[elements]);
					elements++;
					data[1] = Integer.parseInt(dataStrA[elements]);
					elements++;
					data[2] = Integer.parseInt(dataStrA[elements]);
					elements++;
					img.setRGB(j,i,obtenirCouleur(data));
				}
			}
		} catch (FileNotFoundException e) {
			String msg = "Le fichier est introuvable!";
			JOptionPane.showMessageDialog(new JFrame(), msg, "Dialog",
			        JOptionPane.ERROR_MESSAGE);
		} catch (IOException e) {
			String msg = "Lecture impossible d'une ligne dans le fichier!";
			JOptionPane.showMessageDialog(new JFrame(), msg, "Dialog",
			        JOptionPane.ERROR_MESSAGE);
		}
	
	}

	@Override
	public BufferedImage draw() {
		return img;
	}

	@Override
	public int getHeight() {
		// TODO Auto-generated method stub
		return hauteur;
	}

	@Override
	public int getWidth() {
		// TODO Auto-generated method stub
		return largeur;
	}
	
    /* Source : http://www.javafr.com/codes/LIRE-ECRIRE-FICHIER-BMP_34684.aspx */
    /* Permet de retourner une couleur du tableau de donnee. */
    private static int obtenirCouleur(int data[])
    {
    	int couleur = 0;  
    		couleur = data[2] & MASQUE_COMPARAISON;
    		couleur += ((data[1] & MASQUE_COMPARAISON) << 8);
    		couleur += ((data[0] & MASQUE_COMPARAISON) << 16);
        return couleur;
    }

}
